home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Python 1.4 / Python 1.4 source / Mac / Tools / BBPy / source / BBPy_lauch.c next >
Encoding:
C/C++ Source or Header  |  1996-09-18  |  2.7 KB  |  95 lines  |  [TEXT/CWIE]

  1. /*
  2.  *     Launch the PythonSlave.py script.
  3.  *     This works exactly as if you'd double clicked on the file in the Finder, which
  4.  *     not surprisingly is how its implemented (via the AppleEvents route of course).
  5.  *    
  6.  *    Largely based on code submitted by Mark Roseman <roseman@cpsc.ucalgary.ca>
  7.  *    Thanks!
  8.  */
  9.  
  10. #include "BBPy.h"
  11.  
  12. pascal Boolean MyFileFilter(CInfoPBPtr PB);
  13. FileFilterUPP gMyFileFilterUPP = NULL;
  14.  
  15. Boolean GetPythonSlaveSpec(FSSpec * docSpec) {
  16.      StandardFileReply    reply;
  17.     SFTypeList        typeList;
  18.     
  19.     typeList[0] = 'TEXT';
  20.     
  21.     //if (!gMyFileFilterUPP)
  22.         gMyFileFilterUPP = NewFileFilterProc( MyFileFilter );
  23.     
  24.     StandardGetFile(gMyFileFilterUPP, 0, typeList, &reply);
  25.     
  26.     DisposePtr((Ptr)gMyFileFilterUPP);
  27.     
  28.     if(!reply.sfGood)
  29.         return 0; /* user cancelled */
  30.     
  31.     docSpec->vRefNum = reply.sfFile.vRefNum;
  32.     docSpec->parID = reply.sfFile.parID;
  33.     BlockMove(reply.sfFile.name, docSpec->name, 64);
  34.     return 1;
  35. }
  36.  
  37. pascal Boolean MyFileFilter(CInfoPBPtr PB) {
  38.     OSType    fType;    /* file type */
  39.     OSType    fCreator;    /* file creator */
  40.     
  41.     fType =((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdType;
  42.     fCreator = ((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdCreator;
  43.     
  44.     if (fType == 'TEXT' && 
  45.             fCreator == 'Pyth')
  46.         return 0;
  47.     return 1;
  48. }
  49.  
  50. OSErr LaunchPythonSlave(FSSpec * docSpec) {
  51.     OSErr             err;
  52.     FSSpec             dirSpec;
  53.     AEAddressDesc         finderAddress;
  54.     AppleEvent         theEvent, theReply;
  55.     OSType            finderSig = 'MACS';
  56.     AliasHandle         DirAlias, FileAlias;
  57.     AEDesc             fileList;
  58.     AEDesc             aeDirDesc, listElem;
  59.      
  60.     err = AECreateDesc(typeApplSignature, (Ptr)&finderSig, 4, &finderAddress);
  61.     if(err != noErr) return err;
  62.     
  63.     err = AECreateAppleEvent('FNDR', 'sope', &finderAddress,
  64.             kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
  65.     if(err != noErr) return err;
  66.     
  67.     FSMakeFSSpec(docSpec->vRefNum, docSpec->parID, NULL, &dirSpec);
  68.     NewAlias(NULL, &dirSpec, &DirAlias);
  69.     NewAlias(NULL, docSpec, &FileAlias);
  70.     err = AECreateList(NULL, 0, 0, &fileList);
  71.     HLock((Handle)DirAlias);
  72.     AECreateDesc(typeAlias, (Ptr)*DirAlias, GetHandleSize((Handle)DirAlias), &aeDirDesc);
  73.     HUnlock((Handle)DirAlias);
  74.     if ((err = AEPutParamDesc(&theEvent, keyDirectObject, &aeDirDesc)) == noErr) {
  75.         AEDisposeDesc(&aeDirDesc);
  76.         HLock((Handle)FileAlias);
  77.         AECreateDesc(typeAlias, (Ptr)*FileAlias, GetHandleSize((Handle)FileAlias), &listElem);
  78.         HLock((Handle)FileAlias);
  79.         err = AEPutDesc(&fileList, 0, &listElem);
  80.     }
  81.     AEDisposeDesc(&listElem);
  82.     err = AEPutParamDesc(&theEvent, 'fsel', &fileList);
  83.     AEDisposeDesc(&fileList);
  84.         
  85.     err = AESend(&theEvent, &theReply, kAENoReply+kAENeverInteract,
  86.             kAENormalPriority, kAEDefaultTimeout, 0L, 0L);
  87.     if(err != noErr) return err;
  88.     
  89.     err = AEDisposeDesc(&theEvent);
  90.     if(err != noErr) return err;
  91.     
  92.     err = AEDisposeDesc(&theReply);
  93.     return err;
  94. }
  95.